Computer users have long had a need for continuous non-disrupted operation. Therefore methods have been developed to modify and update computer programs concurrently with their execution with new code (a patch) that is loaded into the computer.
Typically, a computer program consists of different sections such as executable machine code, static data variables, and temporary data. The executable code can be comprised of various procedures, which are called via their address in memory. A static data variable is kept valid in the same memory address during the entire execution of the program. In contrast, a temporary data variable (and its location in memory) is only valid during certain periods of the program execution; e.g., while a specific procedure executes.
A patch to computer program code can replace some or all of the complete computer program code. Methods that replace only parts of a computer program are described in the U.S. Pat. No. 5,321,844, the European patent EP0492251B1, and the European patent application EP0757314A1.
The main processor firmware in existing IBM eServer zSeries systems can be patched concurrently such that the complete computer program code is replaced. The method used there assumes that it is possible to replace the currently running code with new code at a time when the temporary data are irrelevant to program execution. In particular, the z-series method ensures preservation of the static variables and their content.
The static variables are used to represent the state of the computer system that is controlled by the firmware, and especially they are used to represent the state of the firmware itself. Since the firmware contributes to the reliability, availability, and service characteristics of the IBM eServer z-series platform to a very large extent, it was an acknowledged practice for the last 10 years among the z-series firmware architects not to touch the static variables of the firmware at all during a concurrent patch operation in order to prevent any system instabilities or failures.
The concurrent patch operation is executed by a concurrent loader process which runs as a background task. The concurrent loader loads new computer program code (so called code load) into the computer system memory and prepares this code for execution. Once the loading and preparation is completed, the concurrent loader brings the computer program to be patched into a state where temporary data can be ignored during the concurrent patch operation. Finally, it switches from the old code to the new code in an atomic operation. This entire procedure is called the application of a concurrent patch.
The preparation of the new program code for its execution consists of resolving and adapting all address references in the code load to the addresses of the memory section into which the code is loaded. This step performed by the concurrent loader is also known as relocation. Therefore a standard linker program can be used for the generation of the program code that does not need special knowledge about the concurrent patch procedure. This makes the concurrent patch application transparent to the programmer. In fact, there is no difference for a code load that can be used for a concurrent patch application to one which can be loaded by a loader that is not a concurrent loader.
The format of the computer program code and the format of the code load used for the concurrent patch is the standard ELF (Executable and Linking Format) format and any linker program that supports the ELF format can be used. A code load in the ELF format can be used for a concurrent patch and it could be loaded by any zSeries-compliant loader that supports the ELF format, which is not necessarily a concurrent loader.
But the main processor firmware in existing IBM eServer zSeries products does not support the addition of new static variables during a concurrent patch application. When static variables are discovered by the concurrent loader during the application of a concurrent patch, the system aborts the application of the patch and continues to use the old version of the program.
Another disadvantage is that it is not possible for the zSeries main processor firmware to discover that a concurrent patch is revoked. The revoking is performed by triggering another concurrent patch application and using the original computer program as the code load. In a typical situation there are various subsequent levels of a computer program and in most cases it is sufficient to switch one level back.